모의해킹
피버팅과터널링_05_SSH 로컬 포트 포워딩 심화
작성자 : Heehyeon Yoo|2025-12-18
# 모의해킹# PNT# SSH# PortForwarding# Socket
1. 개요
SSH 로컬 포트 포워딩(Local Port Forwarding)은 네트워크 및 프로세스 레벨에서 방화벽을 우회하여 내부망 자산(Deep Internal Assets)에 접근하는 핵심 메커니즘이다. 단순한 명령어 실행이 아닌, 소켓 바인딩과 데이터 흐름의 기술적 원리를 정리해본다.
2. SSH 포트 포워딩의 기술적 동작 원리
SSH 포트 포워딩은 단순한 패킷 릴레이가 아니다. SSH 프로토콜의 채널(Channel) 멀티플렉싱(Multiplexing) 기능을 활용한다.
2.1 연결 수립 흐름(Connection Flow)
명령어 ssh -L 8080:Target:80 Pivot 실행 시 발생하는 내부 동작 프로세스다.
- 로컬 바인딩(Local Bind):
- SSH 클라이언트(공격자)가 자신의 OS 커널에서 로컬 포트
8080번에 대한 TCP 소켓(Socket)을 생성하고 리스닝(Listen) 상태로 대기한다.
- SSH 클라이언트(공격자)가 자신의 OS 커널에서 로컬 포트
- 캡슐화 및 전송(Encapsulation):
- 공격자가
localhost:8080으로 HTTP 요청을 보내면, SSH 클라이언트는 이 데이터를 가로채서 암호화한다. - 암호화된 데이터는 기존에 수립된 SSH 세션(TCP 22) 내의 가상 채널을 통해 피벗 호스트로 전송된다.
- 공격자가
- 원격 연결(Remote Connect):
- 피벗 호스트의 SSH 데몬(
sshd)은 수신한 데이터를 복호화한다. sshd는 자신이 주체가 되어 새로운 TCP 연결을 생성하고,Target:80으로 포워딩 요청을 보낸다.- 결과적으로
Target입장에서의Source IP는 공격자가 아닌 피벗 호스트의 IP로 기록된다.
- 피벗 호스트의 SSH 데몬(
2.2 바인딩 주소와 보안(Bind Address)
-L 옵션의 바인딩 주소 설정에 따라 접근 제어가 결정된다.
- 127.0.0.1 (Default):
ssh -L 8080:...(생략 시 기본값).- 오직 공격자 본인(Localhost)만 해당 터널을 사용할 수 있다. 보안상 권장되는 기본 설정이다.
- 0.0.0.0 (All Interfaces):
ssh -L 0.0.0.0:8080:...또는-g옵션.- GatewayPorts 설정이 필요하다.
- 공격자와 같은 네트워크에 있는 다른 사용자도 이 포트를 통해 터널을 탈 수 있어 보안 위험이 증가한다.
3. 기술적 시나리오 분석
3.1 Loopback 서비스 접근(Local-Only Bypass)
- 상황: 피벗 호스트 내부의 phpMyAdmin이나 관리자 콘솔이
127.0.0.1:8080에 바인딩되어 외부 NIC(eth0)에서 접근이 불가능한 경우. - 메커니즘: SSH LPF를 사용하면 트래픽이
eth0를 거치지 않는다. 이미 OS에 로그인된sshd프로세스 내부에서 **Loopback 인터페이스(lo)**로 트래픽을 직접 전달(Redirection)하므로 접근 제어를 우회할 수 있다.
3.2 다중 홉(Multi-Hop)과 라우팅
- 상황: 공격자 -> 피벗(DMZ) -> 타겟(Internal Jenkins).
- 핵심: 타겟 호스트(
10.1.20.50)는 인터넷과 단절되어 있으나, 피벗 호스트와는 라우팅이 가능하다. - 데이터 변환: 공격자의 패킷은 피벗 호스트까지 "SSH 암호화 패킷"으로 도달한다. 피벗 호스트에서 복호화된 후 "일반 HTTP 패킷"으로 변환되어 내부망 라우팅 테이블을 따라 타겟으로 전송된다.
4. 실전 활용 예시
- 웹 인터페이스 우회: 내부망에 숨겨진 Jenkins, Tomcat 관리자 페이지(
localhost:8080)에 접근하여 RCE 취약점을 점검한다. - 로컬 도구 호환성: 복잡한 프록시 설정(ProxyChains) 없이, 공격자의 로컬 도구(Burp Suite, 브라우저, 스크립트)를 수정 없이 그대로 사용할 수 있다.